์žฌ๊ท€, ๋ฐฑํŠธ๋ž™ํ‚น

8/3/2025

push-์žฌ๊ท€-pop-์žฌ๊ท€ vs push-์žฌ๊ท€-pop

function solution1(n) {
  const answer = [];
  function isSafe(queens,row,col) {
    for(const comp of queens){
      const r = comp[0];
      const c = comp[1];
      if(row===r||col===c|| Math.abs(row-r)===Math.abs(col-c)){ // Math.abs์•ˆ์ผ์Œ
        return false;
      }
    }
    return true;
  }

  function solve(queens,row){
    if(row===n){
      answer.push([...queens]); 
      return;
    }

    for(let i=0;i<n;i++){
      const flag = isSafe(queens,row,i);
      if(flag){
        queens.push([row,i]);
        solve(queens,row+1);
        queens.pop();
        //solve(queens.row+1); //์ด๊ฑฐ ๋„ฃ์—ˆ์œผ๋ฉด ์•ˆ๋์Œ.
      }
    }

  }

  solve([],0);
  console.log(answer);
  return answer.length;
}

// console.log("N-Queens (4):", solution1(4));
console.log("N-Queens (8):", solution1(8));

N-Queen ๋ฌธ์ œ ๋ฐฑํŠธ๋ž™ํ‚น ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๋ณด๋ฉด ์–ธ์ œ๋Š” ์žฌ๊ท€ํ•จ์ˆ˜ ํ›„์— pop()ํ•ด์„œ ๋„ฃ์—ˆ๋˜๊ฑธ ๋บ€ ํ›„์— ๋‹ค์‹œ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๋Œ๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ณ , (ใ…”push-์žฌ๊ท€-pop-์žฌ๊ท€) ์–ด์ฉ”๋•Œ๋Š” push-์žฌ๊ท€-pop ๊นŒ์ง€๋งŒ ํ•œ๋‹ค.

ํ˜•์ œ ๋…ธ๋“œ ํƒ์ƒ‰

์ˆœ์—ด์ƒ์„ฑ๊ณผ ๊ฐ™์ด ํ˜•์ œ ๋…ธ๋“œ๋“ค์„ ๋ชจ๋‘ ํƒ์ƒ‰ํ•ด์•ผ ํ•  ๋•Œ๋Š” push-์žฌ๊ท€-pop-์žฌ๊ท€. ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผํ•  ๋•Œ.

๊ทธ๋Ÿฐ๋ฐ ๋‚ด๊ฐ€ ์œ„์˜ N-Queen ๋ฌธ์ œ๋„ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฌธ์ œ ์•„๋‹Œ๊ฐ€?

for๋ฌธ์œผ๋กœ ๋ฐ˜๋ณต์„ ๋ณด์žฅํ•ด์คฌ๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์ง€๋ง‰ ์žฌ๊ท€ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์—†์–ด๋„ ๋œ๋‹ค.

function solveRecursive(queens, row, col) {
    if (row === n) {
        answer.push([...queens]);
        return;
    }
    if (col >= n) return; 
    
    if (isSafe(queens, row, col)) {
        queens.push([row, col]);        
        solveRecursive(queens, row+1, 0); 
        queens.pop();                   
    }
    
    solveRecursive(queens, row, col+1); 
}

์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋‚ด๊ฐ€ ์›๋ž˜ ์ดํ•ดํ•˜๊ณ ์žˆ๋˜ ์žฌ๊ท€ํ•จ์ˆ˜์˜ ํ˜•ํƒœ๊ฐ€ ๋œ๋‹ค.